home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
misc_pto
/
899
/
899gpred.pro
< prev
next >
Wrap
Text File
|
1990-03-30
|
7KB
|
251 lines
project "899"
include "899glob.pro"
% 899GPRED.PRO -- Global Miscelaneous Predicate-clauses
% GLOBAL PREDICATES IN THIS FILE::
% getMusicTypes
% getLabelNames
% repeat
% getIntOpt
% showerr
% message
% askyn
% bep
% inverse
% wait
% up_case
% readKey
% getKey
% change_window_title
% getCorrelating
% listlen
% maxlen
% modifdat
% expgsList
% sameMusicCategory
% writeToEol
% writelist
% writespaces
DATABASE - correlator
determ namelist(gsList)
PREDICATES
key_code(key,CHAR,INTEGER)
key_code2(key,INTEGER)
memberK(key,keylist)
gtIntC2(INTEGER,INTEGER,INTEGER,INTEGER,INTEGER)
wel(INTEGER,INTEGER,CHAR)
stopwatch(INTEGER)
cnt(INTEGER,INTEGER,INTEGER)
match(gs) % Used by correlator
str_split(STRING,gsList,gsList,gsList)
str_add(gsList,gsList,gsList)
CLAUSES
repeat.
repeat :- repeat.
getMusicTypes(CurrentlyDefinedMusicTypes) :-
findall(Music,category(Music),CurrentlyDefinedMusicTypes).
getLabelNames(FullListOfNames) :-
findall(Nms,label(_,Nms,_,_,_,_,_,_),FullListOfNames).
wait :- write("Press Enter to Continue\n"),
getkey(_,[cr]).
/*
memgsList(H,[H|_]) :- !.
memgsList(H,[_|T]) :- memgsList(H,T).
up_case(InChar,Outchar) :-
str_char(InString,InChar),
upper_lower(InStrUp,InString),
str_char(InStrUp,OutChar).
*/
getkey(Retkey,ValidList) :- /* We do fun things */
getbacktrack(Btop),
repeat, /* do the follwing */
readkey(K), /* 1) get a keypress and see what it is */
memberK(K,ValidList), !, /* 2) see if it is in the list of valid keys */
cutbacktrack(Btop),
Retkey=K. /* If so, then return the key otherwise above will loop */
memberK(Object,[Object|_]) :- !. /* Memer of key if is the head */
memberK(Object,[_|Tail]) :- memberK(Object,Tail). /* Or in the tail */
sameMusicCategory(SomeType,[SomeType|_]) :- !.
sameMusicCategory(SomeType,[_|RestOfList]) :- sameMusicCategory(SomeType,RestOfList).
readkey(K):- readchar(T), char_int(T,Val), key_code(K,T,Val).
key_code(K,_,0):- readchar(T), char_int(T,Val), key_code2(K,Val),!.
key_code(break,_,3) :-!. key_code(bdel,_,8):-!.
key_code(tab,_,10) :-!. key_code(cr,_,13) :-!.
key_code(esc,_,27) :-!.
key_code(num(N),_,S) :-S>=$30, S<=$39, N=S-$30, !.
key_code(char(T),T,_).
key_code2(btab,15) :-!. key_code2(home,71):-!.
key_code2(up,72) :-!. key_code2(left,75):-!.
key_code2(right,77) :-!. key_code2(end,79) :-!.
key_code2(down,80) :-!. key_code2(ins,82) :-!.
key_code2(del,83) :-!. key_code2(pgup,73):-!.
key_code2(pgdn,81) :-!.
key_code2(fkey(N),V) :-V>58, V<70, N=V-58, !.
key_code2(other,_).
change_window_title(NewTitle) :- % Changes the title on currently active window
makewindow(_,_,FrameAtt,_,_,_,_,_,_,Placement,BorderDef), % Get some of this
framewindow(FrameAtt,NewTitle,PlaceMent,BorderDef).
/*
inverse(A1,A2):-
bitand(A1,$07,H11),
bitleft(H11,4,H12),
bitand(A1,$70,H21),
bitright(H21,4,H22),
bitand(A1,$08,H31),
A2=H12+H22+H31.
*/
getIntOpt(Min,Max,Choice) :-
getbacktrack(Btop),
write("Please choose an option (",Min,'-',Max,") --> "),
cursor(CurrX,CurrY), % Get coords
repeat,
cursor(CurrX,CurrY),
writeToEol(' '),
cursor(CurrX,CurrY),
readint(X),
cursor(CurrX,CurrY),
gtIntC2(Min,Max,X,CurrX,CurrY),
cutbacktrack(Btop),
Choice = X.
gtIntC2(Min,Max,X,_,_) :-
X >= Min, X <= Max, !.
gtIntC2(_,_,_,CurrX,CurrY) :-
cursor(CurrX,CurrY),
writeToEol(' '),
fail.
writeToEol(DataChar) :-
makewindow(_,_,_,_,_,_,_,MaxY),
LastPlace = MaxY - 2,
cursor(CurrX,CurrY),
getbacktrack(Btop),
wel(CurrY,LastPlace,DataChar),
cutbacktrack(Btop),
cursor(CurrX,CurrY).
wel(X,X,Q) :- !, write(Q).
wel(C,M,D) :- write(D), Nn = C + 1, wel(Nn,M,D).
showerr(Ps) :-
makewindow(105,79,0,"",22,0,2,80),
write(Ps), nl,
wait,
removewindow.
message(Ps) :-
Attr = b_blue + yellow,
makewindow(105,Attr,0,"",22,0,2,80),
write(Ps),
stopwatch(100),
removewindow.
stopwatch(TimeDelay) :-
cnt(TimeDelay,1000,0).
cnt(0,1000,1000) :- !.
cnt(X,N,N) :- !, NewX = X - 1, cnt(NewX,1000,0).
cnt(X,N,F) :- NewF = F + 1, cnt(X,N,NewF).
askyn :- /* Get's user's reponse (Y/N) and fails on anything except Y or y */
readln(Response),
frontchar(Response,RsChar,_),
upchar(RsChar,UsrChar),
UsrChar = 'Y', !.
bep :- sound(5,1300), sound(10,300), sound(15,165).
getCorrelating(SomeGivenMusicType,ListOfQualifiedNames) :-
getbacktrack(Btop),
assert(namelist([]),correlator),
match(SomeGivenMusicType),
retract(namelist(ListOfQualifiedNames),correlator),
cutbacktrack(Btop).
match(GivenMusicType) :-
label(TypesForThisContact,ContactName,_,_,_,_,_,_),
getbacktrack(Btop),
sameMusicCategory(GivenMusicType,TypesForThisContact), % If this succeds
retract(namelist(CurrList),correlator),
NewList = [ContactName | CurrList],
assert(namelist(NewList),correlator),
cutbacktrack(Btop),
fail.
match(_).
/*
maxlen([H|T],MAX,MAX1) :-
str_len(H,LENGTH),
LENGTH>MAX,!,
maxlen(T,LENGTH,MAX1).
maxlen([_|T],MAX,MAX1) :- maxlen(T,MAX,MAX1).
maxlen([],LENGTH,LENGTH).
listlen([],0).
listlen([_|T],N):-
listlen(T,X),
N=X+1.
expgsList(TargetDelete,[TargetDelete|RestOfList],RestOfList) :- !.
expgsList(TargetDelete,[ItemBeforeDeletedItem|RestOfList],NewList) :-
expgsList(TargetDelete,RestOfList,ListOfItemsAfterDeletedItem),
NewList = [ItemBeforeDeletedItem | ListOfItemsAfterDeletedItem]. % Exclude deleted item
*/
modifdat :-
retract(datamodified),
fail.
modifdat :-
assert(datamodified).
writespaces(0) :- !.
writespaces(N) :- write(' '), Nn = N - 1, writespaces(Nn).
writelist([],_) :- !.
writelist([Curr|Next],IndentFactor) :-
Curr <> "", !,
writespaces(Indentfactor),
write(Curr), nl,
writelist(Next,IndentFactor).
writelist([_|Next],IndentFactor) :- writelist(Next,IndentFactor). % Skip Null strings
str_add([],X,X).
str_add([H|L],L1,[H|L2]) :-
str_add(L,L1,L2).
str_split(_,[],[],[]).
str_split(H,[A|X],[A|Y],Z) :-
A > H, !,
str_split(H,X,Y,Z).
str_split(H,[A|X],Y,[A|Z]) :-
A <= H, !,
str_split(H,X,Y,Z).
str_qsort([],[]).
str_qsort([H|T],S) :-
str_split(H,T,A,B),
str_qsort(A,A1),
str_qsort(B,B1),
str_add(A1,[H|B1],S).
uniqueS([],[]).
uniqueS([H|T],L) :- memgsList(H,T), !, uniqueS(T,L).
uniqueS([H|T],[H|L]) :- uniqueS(T,L).